﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using System.Data.SqlClient;

namespace DAO
{
    public static class SocioDAO
    {
        public static int agregarSocio(Socio soc,Usuario usu)
        {
            try
            {
                string cmd = "INSERT INTO Usuario (usu_nombre,usu_clave,usu_rol) VALUES (@nomUsuario,@clave,@rol); ";
                cmd += " INSERT INTO Socio (soc_nombre, soc_apellido,soc_dni,soc_fecha_nacimiento,soc_telefono,soc_mail, soc_usu_nombre) ";
                cmd += " VALUES (@nombre, @apellido, @dni, @fechaNacimiento, @telefono, @mail, @nomUsuario); ";
                List<SqlParameter> listaParam = new List<SqlParameter>();
                listaParam.Add(new SqlParameter("@nombre", soc.Nombre));
                listaParam.Add(new SqlParameter("@apellido", soc.Apellido));
                listaParam.Add(new SqlParameter("@dni", soc.Dni));
                listaParam.Add(new SqlParameter("@fechaNacimiento", soc.FechaNacimiento));
                listaParam.Add(new SqlParameter("@telefono", soc.Telefono));
                listaParam.Add(new SqlParameter("@mail", soc.Mail));
                listaParam.Add(new SqlParameter("@nomUsuario", usu.Nombre));
                listaParam.Add(new SqlParameter("@clave", usu.Clave));
                listaParam.Add(new SqlParameter("@rol", usu.Rol));
                int i = DB.EjecutarCommand(cmd, listaParam);
                return i;
            }
            catch (Exception ex) { string a = ex.Message; return 0; }
        }

        public static List<Socio> obtenerSocios(string dni)
        {
            try
            {
                string cmd = "SELECT soc.soc_id, soc.soc_nombre, soc.soc_apellido, soc.soc_dni,soc.soc_fecha_nacimiento, soc.soc_telefono, soc.soc_mail, soc.soc_usu_nombre ";
                cmd += "FROM Socio soc, Usuario usu WHERE soc.soc_usu_nombre = usu.usu_nombre AND soc_fecha_baja IS NULL";
                List<SqlParameter> listaParam = new List<SqlParameter>();
                if (!string.IsNullOrWhiteSpace(dni))
                {
                    cmd += " AND soc_dni like '%' + @dni + '%'";
                    listaParam.Add(new SqlParameter("@dni", dni));
                }
                SqlDataReader dr = DB.GenerarReader(cmd, listaParam);
                List<Socio> listaSocios = new List<Socio>();
                while (dr.Read())
                {
                    Socio soc = new Socio();
                    Usuario usu = new Usuario();
                    
                    usu.Nombre = dr["soc_usu_nombre"].ToString();
                    soc.Usuario = usu;
                    soc.Id = Int32.Parse(dr["soc_id"].ToString());
                    soc.Nombre = dr["soc_nombre"].ToString();
                    soc.Apellido = dr["soc_apellido"].ToString();
                    soc.Dni = dr["soc_dni"].ToString();
                    soc.FechaNacimiento = Convert.ToDateTime(dr["soc_fecha_nacimiento"].ToString());
                    soc.Telefono = dr["soc_telefono"].ToString();
                    soc.Mail = dr["soc_mail"].ToString();
                    soc.Usuario.Nombre = usu.Nombre;
                                                            
                    listaSocios.Add(soc);
                }
                dr.Close();
                return listaSocios;
            }
            catch (Exception ex) { String a = ex.Message; return null; }                        
        }

        public static Socio obtenerSocio(int id)
        {
            string cmd = "SELECT * FROM socio WHERE soc_id = @id and soc_fecha_baja is null;";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            listaParam.Add(new SqlParameter("@id", id));
            SqlDataReader dr = DB.GenerarReader(cmd, listaParam);
            Socio soc = new Socio();
            while (dr.Read())
            {
                soc.Id = Int32.Parse(dr["soc_id"].ToString());
                soc.Nombre = dr["soc_nombre"].ToString();
                soc.Apellido = dr["soc_apellido"].ToString();
                soc.Dni = dr["soc_dni"].ToString();
                soc.FechaNacimiento=Convert.ToDateTime(dr["soc_fecha_nacimiento"].ToString());
                soc.Telefono = dr["soc_telefono"].ToString();
                soc.Mail=dr["soc_mail"].ToString();
            }
            dr.Close();
            return soc;
        }

        public static Socio obtenerSocioDni(string dni)
        {
            string cmd = "SELECT * FROM socio WHERE soc_dni = @dni and soc_fecha_baja is null;";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            listaParam.Add(new SqlParameter("@dni", dni));
            SqlDataReader dr = DB.GenerarReader(cmd, listaParam);
            //si devuelve cero es al pedo lo que sigue deberia ser nulleable para q devuelva null
            Socio soc = new Socio();
            while (dr.Read())
            {
                soc.Id = Int32.Parse(dr["soc_id"].ToString());
                soc.Nombre = dr["soc_nombre"].ToString();
                soc.Apellido = dr["soc_apellido"].ToString();
                soc.Dni = dr["soc_dni"].ToString();
                soc.FechaNacimiento = Convert.ToDateTime(dr["soc_fecha_nacimiento"].ToString());
                soc.Telefono = dr["soc_telefono"].ToString();
                soc.Mail = dr["soc_mail"].ToString();
            }
            dr.Close();
            return soc;
        }
        public static int bajaSocio(int idSocio)
        {
            string cmd = "UPDATE socio SET soc_fecha_baja = GETDATE() WHERE soc_id = @id;";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            listaParam.Add(new SqlParameter("@id", idSocio));
            return DB.EjecutarCommand(cmd, listaParam);
        }
        
        public static int modificarSocio(Socio soc)
        {
            string cmd = "UPDATE Socio SET soc_nombre = @nombre, soc_apellido = @apellido, soc_dni=@dni, soc_fecha_nacimiento = @fechaNacimiento, soc_telefono = @telefono, soc_mail = @mail ";
            cmd += "WHERE soc_id = @id;";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            listaParam.Add(new SqlParameter("@id", soc.Id));
            listaParam.Add(new SqlParameter("@nombre", soc.Nombre));
            listaParam.Add(new SqlParameter("@apellido", soc.Apellido));
            listaParam.Add(new SqlParameter("@dni", soc.Dni));
            listaParam.Add(new SqlParameter("@fechaNacimiento", soc.FechaNacimiento));
            listaParam.Add(new SqlParameter("@telefono", soc.Telefono));
            listaParam.Add(new SqlParameter("@mail", soc.Mail));
            return DB.EjecutarCommand(cmd, listaParam);
        }
    }
   
}
